package com.hsy.raffle.service.impl;

import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hsy.raffle.dao.UserDao;
import com.hsy.raffle.dto.UserDto;
import com.hsy.raffle.entity.User;
import com.hsy.raffle.service.UserService;
import com.hsy.raffle.vo.R;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.Date;

/**
 * 用户表(User)表服务实现类
 *
 * @author makejava
 * @since 2023-05-08 16:00:24
 */
@Service("userService")
public class UserServiceImpl  implements UserService {

    @Resource
    private UserDao dao;

    @Override
    public R register(UserDto dto) {
        // 验证参数
        if (dto != null && StringUtils.hasLength(dto.getUsername())) {
            // 查询用户名是否存在
            User user = dao.selectOne(new LambdaQueryWrapper<User>().eq(User::getUsername,dto.getUsername()));
            if (user==null) {
                // 用户名不存在，可以注册
                user=new User();
                BeanUtils.copyProperties(dto,user);
                // 业务层设置注册时间
                user.setCtime(new Date());
                // 密码 转换为密文
                user.setPassword(SecureUtil.sha256(dto.getPassword()));
                // 实现注册 新增
                if (dao.insert(user) > 0) {
                    // 注册成功
                    return R.ok();
                }else {
                    return R.fail("用户名已存在");
                }
            }
        }
        return R.fail("参数异常");
    }

    @Override
    public R login(UserDto dto) {
        // 验证参数
        if (dto != null && StringUtils.hasLength(dto.getUsername())){
            // 查询数据库
            User user = dao.selectOne(new LambdaQueryWrapper<User>().eq(User::getUsername, dto.getUsername()));
            if (user!=null) {
                // 用户存在 可登录
                // 验证密码 密文
                if (user.getPassword().equals(SecureUtil.sha256(dto.getPassword()))) {
                    // 前后端分离 Token令牌
                    String token = user.getId()+"";
                    return R.ok(token);
                }
            }
        }
        return R.fail("用户或密码不正确");
    }

    @Override
    public R queryall() {
        return R.ok(dao.selectList(null));
    }

    @Override
    public R queryRaffle() {
        return R.ok(dao.selectraffle());
    }
}

